import Vue from 'vue'
import axios from 'axios'
import router from '../router'
import notification from 'ant-design-vue/es/notification'
import { VueAxios } from './axios'
import { ACCESS_TOKEN, STOPNOTION } from '@/store/mutation-types'
// 创建 axios 实例
const service = axios.create({
  baseURL: process.env.VUE_APP_API_BASE_URL, // api base_url
  timeout: 0, // 请求超时时间
  headers: {

  },
})
// 请求拦截器
service.interceptors.request.use(config => {
  const token = Vue.ls.get(ACCESS_TOKEN)
  if (token) {
    config.headers['Authorization'] = token
  }
  config.headers['Source'] = 'web';
  return config
})

//响应拦截器
service.interceptors.response.use((response) => {
  if (response.data.code === 200) {
    return response.data
  } else if (response.data.code === 400) {
    notification.error({
      message: '错误',
      description: response.data.msg,
      duration: 5
    })
    return
    //200.500.400.300.401.403 302??
  } else if (response.data.code === 500 || response.data.code === 300 || response.data.code === 302) {
    notification.error({
      message: '错误',
      description: response.data.msg,
      duration: 5
    })
    return response.data
  } else if (response.data.code === 401) {
    if (Vue.ls.get(STOPNOTION)) {
      Vue.ls.clear()
      Vue.ls.set(STOPNOTION, false)
      router.push({ name: 'login' });
      notification.error({
        message: '错误',
        description: '您被强制退出登录,请重新登录',
        duration: 5
      })
      setTimeout(() => {

        Vue.ls.set(STOPNOTION, true)
      }, 3000);


    }

  }
  else {

    return response.data

  }
})



// service.interceptors.response.use(
//   response => {
//     // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据// 否则的话抛出错误
//     if (response.status === 200) {
//       return Promise.resolve(response);
//     } else {
//       return Promise.reject(response);
//     }
//   },
//   error => {
//     if (error.response.code) {
//       switch (error.response.code) {
//         // 401: 未登录
//         case 401:
//           if (Vue.ls.get(STOPNOTION)) {
//             Vue.ls.clear()
//             Vue.ls.set(STOPNOTION, false)
//             router.push({ name: 'login' });
//             notification.error({
//               message: '温馨提示',
//               description: '您被强制退出登录,请重新登录'
//             })
//             setTimeout(() => {
//               Vue.ls.set(STOPNOTION, true)
//             }, 3000);
//           }
//           break;
//         // 400 参数错误
//         case 400:
//           notification.error({
//             message: '错误',
//             description: response.data.msg
//           })
//           break;

//         // 404请求不存在
//         case 404:
//           notification.error({
//             message: '温馨提示',
//             description: '页面不存在'
//           })
//           break;
//         // 其他错误，直接抛出错误提示
//         default:
//           notification.error({
//             message: '错误',
//             description: response.data.msg
//           })
//       }
//       return Promise.reject(error.response);
//     }
//   }
// );

//错误可以分离出来写
// const err = (error) => {
//   console.log('error', error)
//   if (error.response) {
//     const data = error.response.data
//     const token = Vue.ls.get(ACCESS_TOKEN)
//     if (error.response.status === 403) {
//       notification.error({
//         message: 'Forbidden',
//         description: data.message
//       })
//     }
//     if (error.response.status === 401 && !(data.result && data.result.isLogin)) {
//       notification.error({
//         message: 'Unauthorized',
//         description: 'Authorization verification failed'
//       })
//       if (token) {
//         store.dispatch('Logout').then(() => {
//           setTimeout(() => {
//             window.location.reload()
//           }, 1500)
//         })
//       }
//     }
//   }
//   return Promise.reject(error)
// }

const installer = {
  vm: {},
  install (Vue) {
    Vue.use(VueAxios, service)
  }
}

export {
  installer as VueAxios,
  service as axios,
}